[t:/]$ 지식_

LUA 디버그 컨트롤러

2025/01/20

루아로 디버그 컨트롤러 만들었던 것이다.

모양은 좀 빠지지만 http uri 컨틀로러 역할을 수행한다.

더 면밀히 신경쓰지 않으면 인젝션 해킹등의 위험성은 있다. 예외처리도 없지만 이렇게도 구성할 수 있다는 것.

그 옛날 web2py나 스트럿츠 생각도 나고, C언어에서 CLI 를 짤 때에는 메시지 루프의 콜백 함수를 늘어놓고 연결하기도 했다. C 언어에 본격적으로 하자면 해시맵을 구현하고 명령어를 바로 인덱싱해서 콜백함수를 연결해야 하지만 보통은 귀찮아서 명령어 파싱 모듈만 따로 만든다.

func_map = { ['bestcates']        = bestcates,
             ['bestcates_random'] = bestcates_random,
             ['cate_best_prod']   = cate_best_prod,
             ['coldstart']        = coldstart,
             ['reco']             = reco,
             ['cohort_cate']      = cohort_cate,
             ['kwd']              = kwd,
             ['me']               = me,
             ['me2']               = me2,
             ['kwd_me']           = kwd_me,
            }

function debug()

    local dm = os.getenv('debug_mode')

    if dm == nil then
        ngx.exit(404)
    end

    local pre_uri = '/ppp/v5/debug/'
    local cmd = string.sub(ngx.var.uri, string.len(pre_uri) + 1, string.len(ngx.var.uri))

    ngx.log(ngx.DEBUG, ngx.var.uri)
    ngx.log(ngx.DEBUG, cmd)

    bl.get_redis()

    if func_map[cmd] == nil then
        res = {}

        for my_cmd, _ in pairs(func_map) do
            res[my_cmd] = ngx.var.scheme.."://".. ngx.var.http_host .. pre_uri .. my_cmd
        end

    else
        global_debug = true
        res = func_map[cmd]()
    end
    util.res_json(res)

end








[t:/] is not "technology - root". dawnsea, rss